
"""
作用 ： 主要是为所有接口提供一些公共功能 ，方便接口调用
功能包括 ：
    1. 返回一个完整的url
    2. 重新封装get，post方法
    3. 处理请请求头
    4. 登录
"""

from setting import BASE_URL
import requests
from loguru import logger
from utils.object_utils import cache
from setting import LOGIN_INFO


class Base(object):

    # 实现url的拼接
    def get_url(self,path,params=None):
        """
        返回的是一个完整的url
        :param path: 接口路径
        :param params: 查询参数
        :return:
        """
        if params:
            full_url = BASE_URL + path + '?' + params
            return full_url
        return BASE_URL + path

    # 实现get方法
    def get(self,url):
        """
        请求get接口
        :param url:
        :return:
        """
        result = None
        response = requests.get(url,headers=self._get_headers())
        try:
            result = response.json()        # 获取JSON格式的响应体
            logger.info("请求url:{},返回结果:{}".format(url,result))
            return result
        except Exception as e:
            logger.error("请求get方法异常，返回数据:{}".format(result))

    # 实现post方法
    def post(self,url,data):
        result = None
        response = requests.post(url, json=data,headers=self._get_headers())
        try:
            result = response.json()  # 获取JSON格式的响应体
            logger.info("请求url:{},请求体数据:{},返回结果:{}".format(url,data, result))
            return result
        except Exception as e:
            logger.error("请求post方法异常，返回数据:{}".format(result))

    # 实现请求头的处理
    def _get_headers(self):
        """
        将请求头中数据以字典形式返回，包括键值对 ：Conetent-Tpye ,X-Litemall-Admin-Token
        :return:
        """
        headers = {"Content-Type":"application/json"}
        token = cache.get('token')      # 获取缓存中的token值
        if token:
            headers.update({'X-Litemall-Admin-Token':token})
            return headers
        return headers

    # 实现登录
    def login(self):
        """
        请求登录，返回结果，将token缓存起来
        :return:
        """
        # 1. 请求登录
        login_path = '/admin/auth/login'
        login_url = self.get_url(login_path)
        result = self.post(login_url,LOGIN_INFO)
        # 2. 进行判断
        if 0 == result.get('errno'):
            logger.success("请求登录接口成功")
            token = result.get('data').get('token')     # 获取token的值
            cache.set('token',token)            # 缓存token，为了后面被调用使用
        else:
            logger.error("登录失败:{}".format(result))
        return result



if __name__ == '__main__':

    base = Base()
    print(base.get_url("/admin/auth/login"))
    print(base.get_url("/admin/admin/list","page=1&limit=20&sort=add_time&order=desc"))
    print(base.login())